package com.bt7274.mapper;

import com.bt7274.pojo.InvitationCode;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 邀请码表 ：用于记录用户生成的邀请码 Mapper 接口
 * </p>
 *
 * @author xyt
 * @since 2025-03-25
 */
public interface InvitationCodeMapper extends BaseMapper<InvitationCode> {
    /**
     * 根据邀请码查询
     *
     * @param code 邀请码
     * @return 邀请码实体
     */
    InvitationCode selectByCode(@Param("code") String code);

    /**
     * 查询用户创建的邀请码
     *
     * @param createBy 创建者ID
     * @return 邀请码列表
     */
    List<InvitationCode> selectByCreateBy(@Param("createBy") String createBy);

    /**
     * 标记邀请码为已使用
     *
     * @param id 邀请码ID
     * @param usedBy 使用者ID
     * @return 影响行数
     */
    int markAsUsed(@Param("id") String id, @Param("usedBy") String usedBy);

    /**
     * 查询有效的邀请码（未过期且未使用）
     *
     * @param code 邀请码
     * @param currentTime 当前时间
     * @return 邀请码实体
     */
    InvitationCode selectValidCode(@Param("code") String code, @Param("currentTime") LocalDateTime currentTime);

    /**
     * 删除过期的邀请码
     *
     * @param currentTime 当前时间
     * @return 删除的行数
     */
    int deleteExpiredCodes(@Param("currentTime") LocalDateTime currentTime);
}